package com.sunrise.financeiro.servico;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.annotation.Resource;

import lombok.Getter;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sunrise.crm.repositorio.iface.UsuarioDao;
import com.sunrise.financeiro.repositorio.iface.ContaDao;
import com.sunrise.generico.entidade.Conta;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.visao.Filtro;

@Service
@Transactional(readOnly = true)
public class ManterContaService {

	@Resource(name = "contaDaoImpl")
	@Getter
	private ContaDao contaDAO;

	@Resource(name = "usuarioDaoImpl")
	@Getter
	private UsuarioDao usuarioDAO;

	public Collection<Conta> buscarPorFiltros(Filtro filtro) {
		Collection<Conta> contas = getContaDAO().buscarPorFiltros(filtro);
		for (Conta conta : contas) {
			conta.getUsuarios().size();
		}
		return contas;
	}

	public Collection<Usuario> adicionarProtudosSelecionados(Usuario[] usuariosSelecionados, Conta conta) {
		Collection<Usuario> usuarios = new ArrayList<Usuario>();
		for (Usuario user : usuariosSelecionados) {
			Boolean inserido = false;
			if (!conta.getUsuarios().isEmpty()) {
				for (Usuario usuario : conta.getUsuarios()) {
					if (usuario.getId().equals(user.getId())) {
						inserido = true;
					}
				}
			}
			if (!inserido) {
				usuarios.add(user);
			}
		}

		return usuarios;
	}

	public List<Usuario> listarUsuariosPorFiltro(Filtro filtro) {
		return getUsuarioDAO().buscarPorFiltros(filtro);
	}

	public Collection<Usuario> listarUsuarioPorNome(String nome) {
		return getUsuarioDAO().listarPorNome(nome);
	}

	public Collection<Conta> listarPorNomeUsuarioLogado(String nome, Long id) {
		return getContaDAO().listarPorNomeUsuarioLogado(nome, id);
	}
}